#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//递归，函数自己调用自己
////写一个简单的递归函数，按顺序打印某个数的每一位数字
//void print(unsigned int n)
//{
//	if (n > 9)
//	{
//		print(n / 10);
//	}
//	printf("%d ", n % 10);
//}
//int main()
//{
//	unsigned int num = 0;
//	scanf("%d", &num);
//	print(num);
//	return 0;
//}

////写一个递归函数，计算字符串的长度
//int my_strlen(char* str)
//{
//	if (*str != '\0')
//	{
//		return 1 + my_strlen(str + 1);
//	}
//	else
//		return 0;
//}
//int main()
//{
//	char arr[] = "wsx";
//	printf("%d", my_strlen(arr));
//	return 0;
//}

////写一个递归函数，计算N的阶乘
//int Fac(int n)
//{
//	if (n <= 1)
//	{
//		return 1;
//	}
//	else
//	{
//		return n * Fac(n - 1);
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = Fac(n);
//	printf("%d", ret);
//	return 0;
//}

//有一些功能，可以使用迭代的方式来实现，也可以使用递归的方式实现
//循环是迭代的一种方式

//求第N个斐波那契数
//递归可以求解，但是效率太低
//int count = 0;
//int fib(int n)
//{
//	if (n == 3)//统计第三个斐波那契数的计算次数
//	{
//		count++;
//	}
//	if (n <= 2)
//	{
//		return 1;
//	}
//	else
//	{
//		return fib(n - 1) + fib(n - 2);
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int num = fib(n);
//	printf("%d\n", num);
//	printf("count=%d", count);
//	return 0;
//}
//用循环来计算第N个斐波那契数,虽然代码会稍微多一点，但是效率会高很多
int fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 0;
	while (n>2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = fib(n);

	printf("%d", ret);
	return 0;
}